package com.ruoyi.common.base;

import lombok.AllArgsConstructor;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * @Author: dzx
 * @Date:Create：in 2020/7/7 0007 15:21
 * @Description:
 * @Modified By：
 * @Version: 1.0
 * private String result;   包括两种状态：“ok”和“not_ok”，不可为空。
 * private Object data;   - 返回具体的数据，可以为空。 默认为空Object,存在数据时不一定为Object,有可能会是Array
 * private String success; 返回具体的数据，可以为空。 默认为空Object,存在数据时不一定为Object,有可能会是Array
 * private Cursor cursor; 返回所包含数据，可以为空。默认为空Object,结构固定
 * private List<Error> errors;  错误返回信息，可以为空。默认空Array,结构固定
 */
@Data
public class BaseResult implements Serializable {
    private static final long serialVersionUID = 5267571721675405173L;

    public static final String RESULT_OK = "ok";
    public static final String RESULT_NOT_OK = "not_ok";
    private static final String SUCCESS = "成功操作";

    private String result;
    private Object data;
    private String success;
    private Cursor cursor;
    private List<Error> errors;

    public static BaseResult ok() {
        return createResult(RESULT_OK, null, SUCCESS, null, null);
    }

    public static BaseResult ok(Object data) {
        return createResult(RESULT_OK, data, "成功操作", null, null);
    }

    public static BaseResult notOk(List<Error> errors) {
        return createResult(RESULT_NOT_OK, null, "", null, errors);
    }

    /**
     * @param result
     * @param data
     * @param success
     * @param cursor
     * @param errors
     * @return
     */
    private static BaseResult createResult(String result, Object data, String success, Cursor cursor, List<Error> errors) {
        BaseResult baseResult = new BaseResult();
        baseResult.setResult(result);
        baseResult.setData(data);
        baseResult.setSuccess(success);
        baseResult.setCursor(cursor);
        baseResult.setErrors(errors);
        return baseResult;
    }


    /**
     * total - integer 全部条数
     * <p>
     * offset - integer 当前所在位置
     * <p>
     * limit - integer 每页条数
     */
    @Data
    public static class Cursor {
        private int total;
        private int offset;
        private int limit;

    }

    /**
     * @AllArgsConstructor 自动生成全参数的构造函数
     */
    @Data
    @AllArgsConstructor
    public static class Error {
        private String field;
        private String message;
    }
}
